Connection Pooling এবং Timeout কনফিগারেশন

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) Spring Boot Client Performance Optimization |
72
72

স্প্রিং বুট ক্লায়েন্টে Connection Pooling এবং Timeout কনফিগারেশন কার্যকর করতে RestTemplate বা WebClient ব্যবহার করা যেতে পারে। নিচে ধাপে ধাপে এই কনফিগারেশনগুলো দেখানো হলো।


১. Connection Pooling কনফিগারেশন

১.১ RestTemplate এর জন্য Connection Pooling

HttpClient বা HttpComponentsClientHttpRequestFactory ব্যবহার করে Connection Pooling সেটআপ করা যায়।

ডিপেন্ডেন্সি যোগ করা:

pom.xml এ Apache HttpClient ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.4</version>
</dependency>

কনফিগারেশন:

import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.core5.util.TimeValue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        // Create connection manager
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(50); // Max total connections
        connectionManager.setDefaultMaxPerRoute(20); // Max connections per route
        connectionManager.setValidateAfterInactivity(TimeValue.ofSeconds(10));

        // Create HttpClient with connection manager
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connectionManager)
                .build();

        // Create RestTemplate with custom request factory
        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        return new RestTemplate(requestFactory);
    }
}

১.২ WebClient এর জন্য Connection Pooling

Reactor Netty ব্যবহার করে WebClient এ Connection Pooling কনফিগার করা যায়।

ডিপেন্ডেন্সি যোগ করা:

<dependency>
    <groupId>io.projectreactor.netty</groupId>
    <artifactId>reactor-netty</artifactId>
</dependency>

কনফিগারেশন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.http.client.HttpClient;
import reactor.netty.resources.ConnectionProvider;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient() {
        // Create connection pool
        ConnectionProvider provider = ConnectionProvider.builder("custom")
                .maxConnections(50)
                .pendingAcquireMaxCount(100)
                .build();

        HttpClient httpClient = HttpClient.create(provider);

        return WebClient.builder()
                .clientConnector(new ReactorClientHttpConnector(httpClient))
                .build();
    }
}

২. Timeout কনফিগারেশন

২.১ RestTemplate এর জন্য Timeout

HttpComponentsClientHttpRequestFactory ব্যবহার করে Timeout কনফিগার করা যায়।

উদাহরণ:

import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.util.Timeout;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        CloseableHttpClient httpClient = HttpClients.custom()
                .setDefaultRequestConfig(
                        org.apache.hc.client5.http.config.RequestConfig.custom()
                                .setConnectTimeout(Timeout.ofSeconds(5)) // Connection timeout
                                .setResponseTimeout(Timeout.ofSeconds(10)) // Read timeout
                                .build()
                )
                .build();

        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        return new RestTemplate(requestFactory);
    }
}

২.২ WebClient এর জন্য Timeout

HttpClient ব্যবহার করে WebClient-এ Timeout কনফিগার করা যায়।

উদাহরণ:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.http.client.HttpClient;
import reactor.netty.resources.ConnectionProvider;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient() {
        HttpClient httpClient = HttpClient.create()
                .responseTimeout(java.time.Duration.ofSeconds(10)) // Response timeout
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000); // Connection timeout

        return WebClient.builder()
                .clientConnector(new ReactorClientHttpConnector(httpClient))
                .build();
    }
}

৩. Connection Pooling এবং Timeout একত্রে ব্যবহার

RestTemplate উদাহরণ:

@Bean
public RestTemplate restTemplate() {
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(50);
    connectionManager.setDefaultMaxPerRoute(20);

    CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .setDefaultRequestConfig(
                    org.apache.hc.client5.http.config.RequestConfig.custom()
                            .setConnectTimeout(Timeout.ofSeconds(5))
                            .setResponseTimeout(Timeout.ofSeconds(10))
                            .build()
            )
            .build();

    return new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
}

WebClient উদাহরণ:

@Bean
public WebClient webClient() {
    ConnectionProvider provider = ConnectionProvider.builder("custom")
            .maxConnections(50)
            .pendingAcquireMaxCount(100)
            .build();

    HttpClient httpClient = HttpClient.create(provider)
            .responseTimeout(java.time.Duration.ofSeconds(10))
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000);

    return WebClient.builder()
            .clientConnector(new ReactorClientHttpConnector(httpClient))
            .build();
}

সংক্ষেপে:

  1. Connection Pooling:
    • RestTemplate: PoolingHttpClientConnectionManager ব্যবহার।
    • WebClient: ConnectionProvider ব্যবহার।
  2. Timeout কনফিগারেশন:
    • Connection এবং Read Timeout নির্ধারণ।
  3. বেস্ট প্র্যাকটিস:
    • উচ্চ কনকারেন্সি হ্যান্ডল করার জন্য Connection Pooling অপরিহার্য।
    • Slow API কল হ্যান্ডল করার জন্য যথাযথ Timeout ব্যবহার করুন।

এই পদ্ধতিগুলো ব্যবহার করে আপনি স্প্রিং বুট ক্লায়েন্টে Connection Pooling এবং Timeout সঠিকভাবে কনফিগার করতে পারবেন।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion